// 从 NestJS 公共模块导入 Controller、Get、Post、Body、Param、UsePipes 和 ValidationPipe 装饰器
import { Controller, Get, Post, Body, Param, UsePipes, ValidationPipe } from '@nestjs/common';
// 导入用户服务类
import { UsersService } from './users.service';
// 导入创建用户数据传输对象
import { CreateUserDto } from './dto/create-user.dto';
// 导入自定义的 ParseIntPipe 管道
import { ParseIntPipe } from './../common/pipe/parse-int.pipe';

/**
 * 用户控制器类，处理与用户相关的 HTTP 请求
 * 路由前缀为 'users'
 */
@Controller('users')
export class UsersController {
  /**
   * 构造函数，注入用户服务
   * @param usersService - 用户服务实例
   */
  constructor(private readonly usersService: UsersService) {}

  /**
   * 处理 GET /users 请求，查询所有用户
   * @returns 返回所有用户的数组
   */
  @Get()
  findAll() {
    // 调用用户服务的 findAll 方法查询所有用户
    return this.usersService.findAll();
  }

  /**
   * 处理 GET /users/:id 请求，根据 ID 查询单个用户
   * @param id - 用户的 ID，使用 ParseIntPipe 管道将参数转换为数字类型
   * @returns 返回查询到的用户
   */
  @Get(':id')
  findOne(@Param('id', ParseIntPipe) id: number) {
    // 调用用户服务的 findOne 方法根据 ID 查询用户
    return this.usersService.findOne(id);
  }

  /**
   * 处理 POST /users 请求，创建新用户
   * 使用 ValidationPipe 对请求体进行数据验证
   * @param createUserDto - 创建用户的数据传输对象，从请求体中获取
   * @returns 返回创建成功的用户
   */
  @Post()
  @UsePipes(ValidationPipe)
  create(@Body() createUserDto: CreateUserDto) {
    // 调用用户服务的 create 方法创建新用户
    return this.usersService.create(createUserDto);
  }
}